// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'dart:convert';

class AuxilaryEndpoint {
  final String url;
  final AuxCheckStatus status;

  const AuxilaryEndpoint({required this.url, required this.status});

  AuxilaryEndpoint copyWith({String? url, AuxCheckStatus? status}) {
    return AuxilaryEndpoint(url: url ?? this.url, status: status ?? this.status);
  }

  @override
  String toString() => 'AuxilaryEndpoint(url: $url, status: $status)';

  @override
  bool operator ==(covariant AuxilaryEndpoint other) {
    if (identical(this, other)) return true;

    return other.url == url && other.status == status;
  }

  @override
  int get hashCode => url.hashCode ^ status.hashCode;

  Map<String, dynamic> toMap() {
    return <String, dynamic>{'url': url, 'status': status.toMap()};
  }

  factory AuxilaryEndpoint.fromMap(Map<String, dynamic> map) {
    return AuxilaryEndpoint(
      url: map['url'] as String,
      status: AuxCheckStatus.fromMap(map['status'] as Map<String, dynamic>),
    );
  }

  String toJson() => json.encode(toMap());

  factory AuxilaryEndpoint.fromJson(String source) =>
      AuxilaryEndpoint.fromMap(json.decode(source) as Map<String, dynamic>);
}

class AuxCheckStatus {
  final String name;
  const AuxCheckStatus({required this.name});
  const AuxCheckStatus._(this.name);

  static const loading = AuxCheckStatus._('loading');
  static const valid = AuxCheckStatus._('valid');
  static const error = AuxCheckStatus._('error');
  static const unknown = AuxCheckStatus._('unknown');

  @override
  bool operator ==(covariant AuxCheckStatus other) {
    if (identical(this, other)) return true;

    return other.name == name;
  }

  @override
  int get hashCode => name.hashCode;

  AuxCheckStatus copyWith({String? name}) {
    return AuxCheckStatus(name: name ?? this.name);
  }

  Map<String, dynamic> toMap() {
    return <String, dynamic>{'name': name};
  }

  factory AuxCheckStatus.fromMap(Map<String, dynamic> map) {
    return AuxCheckStatus(name: map['name'] as String);
  }

  String toJson() => json.encode(toMap());

  factory AuxCheckStatus.fromJson(String source) => AuxCheckStatus.fromMap(json.decode(source) as Map<String, dynamic>);

  @override
  String toString() => 'AuxCheckStatus(name: $name)';
}
